/* * MainWindow.java Created on 15. September 2006, 14:56 */ package de.unisiegen.tpml.ui ; import java.awt.Component ; import java.awt.KeyEventDispatcher ; import java.awt.KeyboardFocusManager ; import java.awt.event.ActionEvent ; import java.awt.event.ActionListener ; import java.awt.event.KeyEvent ; import java.awt.event.WindowAdapter ; import java.awt.event.WindowEvent ; import java.beans.PropertyChangeEvent ; import java.beans.PropertyChangeListener ; import java.io.BufferedReader ; import java.io.File ; import java.io.FileInputStream ; import java.io.FileNotFoundException ; import java.io.IOException ; import java.io.InputStreamReader ; import java.io.UnsupportedEncodingException ; import java.util.LinkedList ; import java.util.ResourceBundle ; import javax.swing.JFileChooser ; import javax.swing.JFrame ; import javax.swing.JMenuItem ; import javax.swing.JOptionPane ; import javax.swing.filechooser.FileFilter ; import org.apache.log4j.Logger ; import de.unisiegen.tpml.core.languages.Language ; import de.unisiegen.tpml.core.languages.LanguageFactory ; import de.unisiegen.tpml.core.languages.NoSuchLanguageException ; import de.unisiegen.tpml.ui.netbeans.EditorPanelForm; import de.unisiegen.tpml.ui.netbeans.MainWindowForm; /** * The main programm window. * * @author Christoph Fehling * @version $Rev:499 $ * @see de.unisiegen.tpml.ui.Main */ public class MainWindow { // // Constants // /** * The unique serialization identifier for this class. */ private static final long serialVersionUID = - 3820623104618482450L ; private MainWindowForm window; /** * The preferences for the <code>de.unisiegen.tpml.ui</code> package. */ // private static final Preferences preferences = Preferences // .userNodeForPackage(MainWindow.class); // // Constructor // /** * Creates new form <code>MainWindow</code>. */ public MainWindow ( ) { window = new MainWindowForm(); window.setMainWindow(this); //initComponents ( ) ; window.setTitle ( "TPML " + Versions.UI ) ; // position the window PreferenceManager prefmanager = PreferenceManager.get ( ) ; window.setBounds ( prefmanager.getWindowBounds ( ) ) ; window.setVisible ( true ) ; // Setting the default states setGeneralStates ( false ) ; window.saveItem.setEnabled ( false ) ; window.saveButton.setEnabled ( false ) ; window.preferencesItem.setEnabled ( true ) ; window.copyItem.setEnabled ( false ) ; window.pasteItem.setEnabled ( false ) ; window.recentFilesMenu.setVisible ( false ) ; window.cutButton.setEnabled ( false ) ; window.copyButton.setEnabled ( false ) ; window.pasteButton.setEnabled ( false ) ; window.printButton.setEnabled ( false ) ; // Finished setting the states. window.addWindowListener ( new WindowAdapter ( ) { @ Override public void windowClosing ( WindowEvent e ) { MainWindow.this.handleQuit ( ) ; } } ) ; KeyboardFocusManager.getCurrentKeyboardFocusManager ( ) .addKeyEventDispatcher ( new KeyEventDispatcher ( ) { public boolean dispatchKeyEvent ( KeyEvent evt ) { if ( ( evt.getID ( ) == KeyEvent.KEY_PRESSED ) ) { if ( ( ( evt.getKeyCode ( ) == KeyEvent.VK_RIGHT ) && evt .isAltDown ( ) ) || ( ( evt.getKeyCode ( ) == KeyEvent.VK_PAGE_DOWN ) && evt .isControlDown ( ) ) ) { if ( window.tabbedPane.getSelectedIndex ( ) + 1 == window.tabbedPane .getTabCount ( ) ) { window.tabbedPane.setSelectedIndex ( 0 ) ; return true ; } else { window.tabbedPane .setSelectedIndex ( window.tabbedPane.getSelectedIndex ( ) + 1 ) ; return true ; } } else { if ( ( ( evt.getKeyCode ( ) == KeyEvent.VK_LEFT ) && evt .isAltDown ( ) ) || ( ( evt.getKeyCode ( ) == KeyEvent.VK_PAGE_UP ) && evt .isControlDown ( ) ) ) { if ( window.tabbedPane.getSelectedIndex ( ) == 0 ) { window.tabbedPane .setSelectedIndex ( window.tabbedPane.getTabCount ( ) - 1 ) ; return true ; } else { window.tabbedPane.setSelectedIndex ( window.tabbedPane .getSelectedIndex ( ) - 1 ) ; return true ; } } } } return false ; } } ) ; this.editorPanelListener = new PropertyChangeListener ( ) { public void propertyChange ( PropertyChangeEvent evt ) { editorStatusChange ( evt.getPropertyName ( ) , evt.getNewValue ( ) ) ; } } ; this.recentlyUsed = prefmanager.getRecentlyUsed ( ) ; // TODO this is ugly :( for ( int i = 0 ; i < recentlyUsed.size ( ) ; i ++ ) { recentlyUsed.get ( i ).setWindow ( this ) ; } updateRecentlyUsed ( ) ; // apply the last "advanced mode" setting boolean advanced = prefmanager.getAdvanced ( ) ; window.advancedRadioButton.setSelected ( advanced ) ; window.beginnerRadioButton.setSelected ( ! advanced ) ; // apply the last maximization state if ( prefmanager.getWindowMaximized ( ) ) { // set to maximized window .setExtendedState ( window.getExtendedState ( ) | JFrame.MAXIMIZED_BOTH ) ; } } // End of variables declaration//GEN-END:variables private PropertyChangeListener editorPanelListener ; private static final Logger logger = Logger.getLogger ( MainWindow.class ) ; // private PreferenceManager prefmanager; private static int historyLength = 9 ; private LinkedList < HistoryItem > recentlyUsed ; // Self-defined methods: void openFile ( File file ) { if ( file == null ) { throw new NullPointerException ( "file is null" ) ; } try { // check if we already have an editor panel for the file EditorPanel editorPanel = null ; for ( Component component : window.tabbedPane.getComponents ( ) ) { if ( component instanceof EditorPanelForm && file.equals ( ( (( EditorPanelForm ) component).getCaller() ).getFile ( ) ) ) { editorPanel = (( EditorPanelForm ) component).getCaller() ; break ; } } // if we don't already have the editor panel, create a new one if ( editorPanel == null ) { LanguageFactory langfactory = LanguageFactory.newInstance ( ) ; Language language = langfactory.getLanguageByFile ( file ) ; String str = null ; StringBuilder buffer = new StringBuilder ( ) ; int onechar ; try { BufferedReader in = new BufferedReader ( new InputStreamReader ( new FileInputStream ( file ) , "UTF8" ) ) ; while ( ( onechar = in.read ( ) ) != - 1 ) { buffer.append ( ( char ) onechar ) ; } in.close ( ) ; } catch ( UnsupportedEncodingException e ) { System.err.println ( "UnsupportedEncodingException" ) ; } if (language.isTypeLanguage ( )){ editorPanel = new EditorPanelTypes ( language , this ) ; } else { editorPanel = new EditorPanelExpression ( language , this ) ; } window.tabbedPane.add ( ( Component ) editorPanel.getPanel() ) ; editorPanel.setAdvanced ( window.advancedRadioButton.isSelected ( ) ) ; editorPanel.setFileName ( file.getName ( ) ) ; editorPanel.setEditorText ( buffer.toString ( ) ) ; editorPanel.setFile ( file ) ; editorPanel.addPropertyChangeListener ( editorPanelListener ) ; editorPanel.setTexteditor ( true ) ; } window.tabbedPane.setSelectedComponent ( ( Component ) editorPanel.getPanel() ) ; setGeneralStates ( true ) ; updateEditorStates ( editorPanel ) ; } catch ( NoSuchLanguageException e ) { logger.error ( "Language does not exist." , e ) ; JOptionPane.showMessageDialog ( window , java.util.ResourceBundle .getBundle ( "de/unisiegen/tpml/ui/ui" ).getString ( "FileNotSupported" ) , java.util.ResourceBundle.getBundle ( "de/unisiegen/tpml/ui/ui" ).getString ( "Open_File" ) , JOptionPane.ERROR_MESSAGE ) ; } catch ( FileNotFoundException e ) { logger.error ( "File specified could not be found" , e ) ; JOptionPane.showMessageDialog ( window , java.util.ResourceBundle .getBundle ( "de/unisiegen/tpml/ui/ui" ).getString ( "FileCannotBeFound" ) , java.util.ResourceBundle.getBundle ( "de/unisiegen/tpml/ui/ui" ).getString ( "Open_File" ) , JOptionPane.ERROR_MESSAGE ) ; } catch ( IOException e ) { logger.error ( "Could not read from the file specified" , e ) ; JOptionPane.showMessageDialog ( window , java.util.ResourceBundle .getBundle ( "de/unisiegen/tpml/ui/ui" ).getString ( "FileCannotBeRead" ) , java.util.ResourceBundle.getBundle ( "de/unisiegen/tpml/ui/ui" ).getString ( "Open_File" ) , JOptionPane.ERROR_MESSAGE ) ; } } private void setGeneralStates ( boolean state ) { window.smallstepItem.setEnabled ( state ) ; window.bigstepItem.setEnabled ( state ) ; window.typecheckerItem.setEnabled ( state ) ; window.minimaltypingItem.setEnabled ( state ) ; window.typeinferenceItem.setEnabled ( state ) ; window.subtypingItem.setEnabled ( state ) ; window.subtypingrecItem.setEnabled ( state ) ; window.saveAsItem.setEnabled ( state ) ; window.saveAsButton.setEnabled ( state ) ; window.saveAllItem.setEnabled ( state ) ; window.closeItem.setEnabled ( state ) ; window.cutItem.setEnabled ( state ) ; window.cutButton.setEnabled ( state ) ; window.copyItem.setEnabled ( state ) ; window.copyButton.setEnabled ( state ) ; window.pasteItem.setEnabled ( state ) ; window.pasteButton.setEnabled ( state ) ; window.printButton.setEnabled ( state ) ; window.printItem.setEnabled ( state ) ; window.latexExportItem.setEnabled ( state ) ; window.latexExportButton.setEnabled ( state ) ; setUndoState ( state ) ; setRedoState ( state ) ; } private void editorStatusChange ( String ident , Object newValue ) { // logger.debug ( "Editor status changed: " + ident ) ; // if ( ident.equals ( "redoStatus" ) ) // { // logger.debug ( "Editor status changed. Ident: redoStatus" ) ; // setRedoState ( ( Boolean ) newValue ) ; // } // else if ( ident.equals ( "filename" ) ) // { // logger.debug ( "Editor status changed. Ident: filename" ) ; // tabbedPane.setTitleAt ( tabbedPane.getSelectedIndex ( ) , // ( String ) newValue ) ; // // TODO merge undostatus and changestatus // } // else if ( ident.equals ( "undoStatus" ) ) // { // logger.debug ( "Editor status changed. Ident: undoStatus" ) ; // setUndoState ( ( Boolean ) newValue ) ; // // setChangeState((Boolean) newValue); // } // else if ( ident.equals ( "changed" ) ) // { // logger.debug ( "Editor status changed. Ident: changed" ) ; // setChangeState ( ( Boolean ) newValue ) ; // // setSaveState((Boolean) newValue); // } // else if ( ident.equals ( "texteditor" ) ) // { // logger.debug ( "Editor status changed. Ident: textditor" ) ; // cutItem.setEnabled ( ( Boolean ) newValue ) ; // cutButton.setEnabled ( ( Boolean ) newValue ) ; // copyItem.setEnabled ( ( Boolean ) newValue ) ; // copyButton.setEnabled ( ( Boolean ) newValue ) ; // pasteItem.setEnabled ( ( Boolean ) newValue ) ; // pasteButton.setEnabled ( ( Boolean ) newValue ) ; // } updateEditorStates((EditorPanel)((EditorPanelForm) window.tabbedPane.getSelectedComponent()).getCaller()); } public void updateEditorStates (EditorPanel editor){ updateEditorStates((EditorPanelForm)editor.getPanel()); } public void updateEditorStates ( EditorPanelForm editorform ) { if ( editorform == null ) {// last tab was closed setGeneralStates ( false ) ; // } // if (getActiveEditor() == null) { // the same as above? // setGeneralStates(false); } else { EditorPanel editor = editorform.getCaller(); setRedoState ( editor.isRedoStatus ( ) ) ; setUndoState ( editor.isUndoStatus ( ) ) ; // setSaveState(editor.isUndoStatus()); if ( editor.isTexteditor ( ) ) { setChangeState ( editor.isSaveStatus ( ) ) ; setEditorFunctions ( true ) ; } else { setChangeState (editor.isSaveStatus()); setEditorFunctions ( false ) ; } } if (this.getActiveEditor ( ) instanceof EditorPanelExpression) setExpressionMode(); else setTypeMode(); } private void setEditorFunctions ( boolean state ) { window.cutButton.setEnabled ( state ) ; window.cutItem.setEnabled ( state ) ; window.copyButton.setEnabled ( state ) ; window.copyItem.setEnabled ( state ) ; window.pasteButton.setEnabled ( state ) ; window.pasteItem.setEnabled ( state ) ; } private void updateRecentlyUsed ( ) { final int length = ( this.recentlyUsed.size ( ) > historyLength ) ? historyLength : this.recentlyUsed.size ( ) ; if ( length > historyLength ) { logger.error ( "Error: The list of recently used files is larger than " + historyLength ) ; } HistoryItem item ; window.recentFilesMenu.setVisible ( length > 0 ) ; window.fileMenuSeperator3.setVisible ( length > 0 ) ; window.recentFilesMenu.removeAll ( ) ; for ( int i = 0 ; i < length ; i ++ ) { item = this.recentlyUsed.get ( i ) ; item.setText ( "" + ( i + 1 ) + ". " + item.getFile ( ).getName ( ) ) ; window.recentFilesMenu.add ( item ) ; } window.recentFilesMenu.addSeparator ( ) ; JMenuItem openAllItem = new JMenuItem ( ResourceBundle.getBundle ( "de/unisiegen/tpml/ui/ui" ).getString ( "OpenAll" ) ) ; openAllItem .setMnemonic ( ResourceBundle.getBundle ( "de/unisiegen/tpml/ui/ui" ) .getString ( "OpenAllMnemonic" ).charAt ( 0 ) ) ; openAllItem.addActionListener ( new ActionListener ( ) { public void actionPerformed ( ActionEvent e ) { for ( int i = 0 ; i < length ; ++ i ) { File file = MainWindow.this.recentlyUsed.get ( i ).getFile ( ) ; openFile ( file ) ; } } } ) ; window.recentFilesMenu.add ( openAllItem ) ; } public void addRecentlyUsed ( HistoryItem historyItem ) { boolean alreadyPresent = false ; // check if a similar entry in the history already exists: for ( int i = 0 ; i < recentlyUsed.size ( ) ; i ++ ) { if ( recentlyUsed.get ( i ).getFile ( ).toURI ( ).equals ( historyItem.getFile ( ).toURI ( ) ) ) { alreadyPresent = true ; } } if ( ! alreadyPresent ) recentlyUsed.addFirst ( historyItem ) ; historyItem.setWindow ( this ) ; if ( recentlyUsed.size ( ) > historyLength ) recentlyUsed.removeLast ( ) ; updateRecentlyUsed ( ) ; } private void setRedoState ( Boolean state ) { window.redoButton.setEnabled ( state ) ; window.redoItem.setEnabled ( state ) ; } private void setUndoState ( Boolean state ) { logger.debug ( "UndoStatus of MainWindow set to " + state ) ; window.undoButton.setEnabled ( state ) ; window.undoItem.setEnabled ( state ) ; } private void setSaveState ( Boolean state ) { window.saveButton.setEnabled ( state ) ; window.saveItem.setEnabled ( state ) ; } private void setChangeState ( Boolean state ) { if ( state ) { window.tabbedPane.setTitleAt ( window.tabbedPane.getSelectedIndex ( ) , "*" + ( (( EditorPanelForm ) window.tabbedPane.getSelectedComponent ( ) )).getCaller() .getFileName ( ) ) ; setSaveState ( true ) ; } else { window.tabbedPane.setTitleAt ( window.tabbedPane.getSelectedIndex ( ) , (( ( EditorPanelForm ) window.tabbedPane.getSelectedComponent ( ) )).getCaller() .getFileName ( ) ) ; setSaveState ( false ) ; } } public EditorPanel getActiveEditor ( ) { if (window.tabbedPane.getSelectedComponent ( ) == null) return null; return (( EditorPanelForm ) window.tabbedPane.getSelectedComponent ( )).getCaller(); } public void handleNew ( ) { FileWizard wizard = new FileWizard ( window , true ) ; wizard.setLocationRelativeTo ( window ) ; wizard.setVisible ( true ) ; Language language = wizard.getLanguage ( ) ; if ( language == null ) return ; EditorPanel newEditorPanel = null; if (!language.isTypeLanguage ( ) ){ newEditorPanel = new EditorPanelExpression ( language , this ) ; setExpressionMode(); } else { newEditorPanel = new EditorPanelTypes ( language , this ) ; setTypeMode(); } window.tabbedPane.add ( ( Component ) newEditorPanel.getPanel() ) ; newEditorPanel.setAdvanced ( window.advancedRadioButton.isSelected ( ) ) ; window.tabbedPane.setSelectedComponent ( ( Component ) newEditorPanel.getPanel() ) ; newEditorPanel.addPropertyChangeListener ( editorPanelListener ) ; newEditorPanel.setTexteditor ( true ) ; setGeneralStates ( true ) ; updateEditorStates ( newEditorPanel ) ; } private void setTypeMode ( ) { window.smallstepItem.setVisible ( false ) ; window.bigstepItem.setVisible ( false ) ; window.typecheckerItem.setVisible ( false ) ; window.minimaltypingItem.setVisible ( false ) ; window.typeinferenceItem.setVisible ( false ) ; window.subtypingItem.setVisible ( true ) ; window.subtypingrecItem.setVisible ( true ); } private void setExpressionMode ( ) { window.smallstepItem.setVisible ( true ) ; window.bigstepItem.setVisible ( true ) ; window.typecheckerItem.setVisible ( true ) ; window.minimaltypingItem.setVisible ( true ) ; window.typeinferenceItem.setVisible ( true ) ; window.subtypingItem.setVisible ( false ) ; window.subtypingrecItem.setVisible ( false ); } public void handleOpen ( ) { PreferenceManager prefmanager = PreferenceManager.get ( ) ; JFileChooser chooser = new JFileChooser ( prefmanager.getWorkingPath ( ) ) ; chooser.setMultiSelectionEnabled ( true ) ; final LanguageFactory factory = LanguageFactory.newInstance ( ) ; chooser.addChoosableFileFilter ( new FileFilter ( ) { @ Override public boolean accept ( File f ) { if ( f.isDirectory ( ) ) { return true ; } try { factory.getLanguageByFile ( f ) ; return true ; } catch ( NoSuchLanguageException e ) { return false ; } } @ Override public String getDescription ( ) { Language [ ] languages = factory.getAvailableLanguages ( ) ; StringBuilder builder = new StringBuilder ( 128 ) ; builder.append ( "Source Files (" ) ; for ( int n = 0 ; n < languages.length ; ++ n ) { if ( n > 0 ) { builder.append ( "; " ) ; } builder.append ( "*." ) ; builder.append ( languages [ n ].getName ( ).toLowerCase ( ) ) ; } builder.append ( ')' ) ; return builder.toString ( ) ; } } ) ; chooser.setAcceptAllFileFilterUsed ( false ) ; int returnVal = chooser.showOpenDialog ( window ) ; if ( returnVal == JFileChooser.APPROVE_OPTION ) { File [ ] files = chooser.getSelectedFiles ( ) ; for ( int i = 0 ; i < files.length ; i ++ ) { openFile ( files [ i ] ) ; } } prefmanager.setWorkingPath ( chooser.getCurrentDirectory ( ) .getAbsolutePath ( ) ) ; } public void handleQuit ( ) { // be sure to save all files first for ( Component component : window.tabbedPane.getComponents ( ) ) { if ( component instanceof EditorPanelForm ) { EditorPanel editorPanel = (( EditorPanelForm ) component).getCaller() ; if ( ! editorPanel.shouldBeSaved ( ) ) { continue ; } // Custom button text Object [ ] options = { java.util.ResourceBundle.getBundle ( "de/unisiegen/tpml/ui/ui" ) .getString ( "Yes" ) , java.util.ResourceBundle.getBundle ( "de/unisiegen/tpml/ui/ui" ) .getString ( "No" ) , java.util.ResourceBundle.getBundle ( "de/unisiegen/tpml/ui/ui" ) .getString ( "Cancel" ) } ; int n = JOptionPane.showOptionDialog ( window , editorPanel .getFileName ( ) + " " + java.util.ResourceBundle.getBundle ( "de/unisiegen/tpml/ui/ui" ) .getString ( "WantTosave" ) , java.util.ResourceBundle .getBundle ( "de/unisiegen/tpml/ui/ui" ).getString ( "Save_File" ) , JOptionPane.YES_NO_CANCEL_OPTION , JOptionPane.QUESTION_MESSAGE , null , options , options [ 2 ] ) ; switch ( n ) { case 0 : // Save changes logger.debug ( "Quit dialog: YES" ) ; if ( ! editorPanel.handleSave ( ) ) { // abort the quit return ; } break ; case 1 : // Do not save changes logger.debug ( "Quit dialog: NO" ) ; break ; default : // Cancelled logger.debug ( "Quit dialog: CANCEL" ) ; return ; } } } // save the session saveOpenFiles ( ) ; // remember the settings PreferenceManager prefmanager = PreferenceManager.get ( ) ; prefmanager.setAdvanced ( window.advancedRadioButton.isSelected ( ) ) ; // remember the history prefmanager.setRecentlyUsed ( recentlyUsed ) ; // remember window state prefmanager.setWindowPreferences ( window ) ; // terminate the application System.exit ( 0 ) ; } /** * Closes the active editor window. * * @return true if the active editor could be closed. */ public boolean handleClose ( ) { EditorPanel selectedEditor = getActiveEditor ( ) ; boolean success ; if ( selectedEditor.shouldBeSaved ( ) ) { Object [ ] options = { java.util.ResourceBundle.getBundle ( "de/unisiegen/tpml/ui/ui" ) .getString ( "Yes" ) , java.util.ResourceBundle.getBundle ( "de/unisiegen/tpml/ui/ui" ) .getString ( "No" ) , java.util.ResourceBundle.getBundle ( "de/unisiegen/tpml/ui/ui" ) .getString ( "Cancel" ) } ; int n = JOptionPane.showOptionDialog ( window , selectedEditor .getFileName ( ) + java.util.ResourceBundle.getBundle ( "de/unisiegen/tpml/ui/ui" ) .getString ( "WantTosave" ) , java.util.ResourceBundle.getBundle ( "de/unisiegen/tpml/ui/ui" ).getString ( "Save_File" ) , JOptionPane.YES_NO_CANCEL_OPTION , JOptionPane.QUESTION_MESSAGE , null , options , options [ 2 ] ) ; switch ( n ) { case 0 : // Save Changes logger.debug ( "Close dialog: YES" ) ; success = selectedEditor.handleSave ( ) ; if ( success ) { window.tabbedPane.remove ( window.tabbedPane.getSelectedIndex ( ) ) ; window.repaint ( ) ; } return success ; case 1 : // Do not save changes logger.debug ( "Close dialog: NO" ) ; window.tabbedPane.remove ( window.tabbedPane.getSelectedIndex ( ) ) ; window.repaint ( ) ; success = true ; case 2 : // Cancelled. logger.debug ( "Close dialog: CANCEL" ) ; success = false ; default : success = false ; } } else { window.tabbedPane.remove ( window.tabbedPane.getSelectedIndex ( ) ) ; window.repaint ( ) ; success = true ; } if ( getActiveEditor ( ) == null ) { setGeneralStates ( false ) ; window.saveItem.setEnabled ( false ) ; window.saveButton.setEnabled ( false ) ; } return success ; } public void handleSaveAll ( ) { int tabcount = window.tabbedPane.getComponentCount ( ) ; for ( int i = 0 ; i < tabcount ; i ++ ) { if ( ! (( ( EditorPanelForm ) window.tabbedPane.getComponentAt ( i ) )).getCaller().handleSave ( ) ) return ; } } /** * Stores the list of open files for the next start (see * {@link #restoreOpenFiles()}), that is the list of files from the * {@link EditorPanel}s that have valid <code>File</code> objects. This is * called exactly once on quit. * * @see #restoreOpenFiles() */ public void saveOpenFiles ( ) { int tabcount = window.tabbedPane.getComponentCount ( ) ; LinkedList < File > filelist = new LinkedList < File > ( ) ; File file ; for ( int i = 0 ; i < tabcount ; i ++ ) { file = ( ( EditorPanelForm ) window.tabbedPane.getComponentAt ( i ) ).getCaller().getFile ( ) ; if ( file != null ) { filelist.add ( file ) ; } } PreferenceManager.get ( ).setOpenFiles ( filelist ) ; } /** * Restores the list of open files from a previous session, previously saved * by the {@link #saveOpenFiles()} method. This is called on startup if no * files where provided. * * @see #saveOpenFiles() */ public void restoreOpenFiles ( ) { LinkedList < File > filelist = PreferenceManager.get ( ).getOpenFiles ( ) ; File currentfile ; for ( int i = 0 ; i < filelist.size ( ) ; i ++ ) { currentfile = filelist.get ( i ) ; if ( currentfile.exists ( ) && currentfile.canRead ( ) ) { openFile ( currentfile ) ; } } } }